package Class对象功能的演示;

/**
 * @Auther:云尚学Java
 */

import 反射中Class对象的创建.Person;

import java.lang.reflect.Method;

/**
 * 功能描述：
 * 通过此类完成对Class类对象下的成员方法的使用
 * <p>
 * 3. 获取成员方法们：
 * Method[] getMethods()
 * Method getMethod(String name, 类<?>... parameterTypes)
 * <p>
 * Method[] getDeclaredMethods()
 * Method getDeclaredMethod(String name, 类<?>... parameterTypes)
 */
public class ReflectDemo3 {
    public static void main(String[] args) throws Exception {
        //2. 类名.class：通过类名的属性class获取
        Class personClass = Person.class;
        System.out.println("2:" + personClass);
        Method eat_method=personClass.getMethod("eat");
        //public void 反射中Class对象的创建，Person.eat()
        System.out.println(eat_method);
        Person p=new Person();
        eat_method.invoke(p);


        System.out.println("---------");
        Method eat1_method=personClass.getMethod("eat",String.class);
        System.out.println(eat1_method);
        eat1_method.invoke(p,"米饭");


        System.out.println("----------");
        Method[] methods=personClass.getMethods();
        for(Method method:methods){
            System.out.println(method+"-"+method.getName());//方法名称

        }
        System.out.println("++++++++++++");
        Method[] declaredMethodsperson=personClass.getDeclaredMethods();
        //获取私有的方法
        for(Method method:declaredMethodsperson){
            System.out.println(method+"-"+method.getName());
        }
        System.out.println("---------");
        String className=personClass.getName();
        System.out.println("personClass:"+personClass);
        System.out.println("className:"+className);
    }
}
